/**
 * 开源代码，仅供学习和交流研究使用，商用请联系三丙
 * 微信：mohan_88888
 * 抖音：程序员三丙
 * 付费课程知识星球：https://t.zsxq.com/aKtXo
 */
package sanbing.jcpp.protocol.lvneng.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.HashMap;
import java.util.Map;

/**
 * 充电桩结束原因编码定义
 */
@AllArgsConstructor
@Getter
public enum LvnengPileFinishReasonEnum {
    // 中止代码1 → 上报值：1 + 256 = 257
    CODE_257(257, "BMS 中止"),

    // 中止代码2 → 上报值：2 + 256 = 258
    CODE_258(258, "平台中止"),

    // 中止代码3 → 上报值：3 + 256 = 259
    CODE_259(259, "人工设定条件中止"),

    // 中止代码4 → 上报值：4 + 256 = 260
    CODE_260(260, "人工中止"),

    // 中止代码5 → 上报值：5 + 256 = 261
    CODE_261(261, "充电机故障中止"),

    // 中止代码6 → 上报值：6 + 256 = 262
    CODE_262(262, "连接器故障中止"),

    // 中止代码7 → 上报值：7 + 256 = 263
    CODE_263(263, "连接器拔出中止"),

    // 中止代码9 → 上报值：9 + 256 = 265
    CODE_265(265, "主接触器异常中止"),

    // 中止代码10 → 上报值：10 + 256 = 266
    CODE_266(266, "并联接触器异常中止"),

    // 中止代码11 → 上报值：11 + 256 = 267
    CODE_267(267, "电子锁异常中止"),

    // 中止代码12 → 上报值：12 + 256 = 268
    CODE_268(268, "充电电压异常中止"),

    // 中止代码13 → 上报值：13 + 256 = 269
    CODE_269(269, "充电电流小中止"),

    // 中止代码14 → 上报值：14 + 256 = 270
    CODE_270(270, "充电电流过流中止"),

    // 中止代码15 → 上报值：15 + 256 = 271
    CODE_271(271, "充电电压不匹配中止"),

    // 中止代码16 → 上报值：16 + 256 = 272
    CODE_272(272, "BMS 数据不刷新中止"),

    // 中止代码17 → 上报值：17 + 256 = 273
    CODE_273(273, "电能表通信故障中止"),

    // 中止代码19 → 上报值：19 + 256 = 275
    CODE_275(275, "SOC 满中止"),

    // 中止代码22 → 上报值：22 + 256 = 278
    CODE_278(278, "主动防护电池过温中止"),

    // 中止代码23 → 上报值：23 + 256 = 279
    CODE_279(279, "主动防护电池低温中止"),

    // 中止代码24 → 上报值：24 + 256 = 280
    CODE_280(280, "主动防护电池热失控中止"),

    // 中止代码25 → 上报值：25 + 256 = 281
    CODE_281(281, "主动防护电池过充中止"),

    // 中止代码26 → 上报值：26 + 256 = 282
    CODE_282(282, "BMS 辅助电源异常中止"),

    // 中止代码27 → 上报值：27 + 256 = 283
    CODE_283(283, "BMS 接触器开路故障中止"),

    // 中止代码28 → 上报值：28 + 256 = 284
    CODE_284(284, "主动防护 BMS 数据超范围中止"),

    // 中止代码29 → 上报值：29 + 256 = 285
    CODE_285(285, "TMU 过温中止"),

    // 中止代码30 → 上报值：30 + 256 = 286
    CODE_286(286, "主动防护电池端口电压异常中止"),

    // 中止代码33 → 上报值：33 + 256 = 289
    CODE_289(289, "拔枪中止"),

    // 中止代码34 → 上报值：34 + 256 = 290
    CODE_290(290, "设备过温中止"),

    // 中止代码35 → 上报值：35 + 256 = 291
    CODE_291(291, "过流中止"),

    // 中止代码36 → 上报值：36 + 256 = 292
    CODE_292(292, "过压中止"),

    // 中止代码37 → 上报值：37 + 256 = 293
    CODE_293(293, "欠压中止"),

    // 中止代码40 → 上报值：40 + 256 = 296
    CODE_296(296, "充电枪座过温中止"),

    // 中止代码43 → 上报值：43 + 256 = 299
    CODE_299(299, "枪头过温中止"),

    // 中止代码44 → 上报值：44 + 256 = 300
    CODE_300(300, "模块开启失败中止"),

    // 中止代码46 → 上报值：46 + 256 = 302
    CODE_302(302, "浸水故障中止"),

    // 中止代码49 → 上报值：49 + 256 = 305
    CODE_305(305, "结束中不响应启动充电命令中止"),

    // 中止代码51 → 上报值：51 + 256 = 307
    CODE_307(307, "主动防护电池单体过压中止"),

    // 中止代码52 → 上报值：52 + 256 = 308
    CODE_308(308, "主动防护电池整包过压中止"),

    // 中止代码53 → 上报值：53 + 256 = 309
    CODE_309(309, "电表校验错误中止"),

    // 中止代码54 → 上报值：54 + 256 = 310
    CODE_310(310, "BMS 通讯超时中止"),

    // 中止代码55 → 上报值：55 + 256 = 311
    CODE_311(311, "充电电压不匹配中止"),

    // 中止代码56 → 上报值：56 + 256 = 312
    CODE_312(312, "系统风扇故障中止"),

    // 中止代码57 → 上报值：57 + 256 = 313
    CODE_313(313, "CMU 急停中止"),

    // 中止代码58 → 上报值：58 + 256 = 314
    CODE_314(314, "充电机绝缘异常中止"),

    // 中止代码59 → 上报值：59 + 256 = 315
    CODE_315(315, "充电机无可用模块中止"),

    // 中止代码62 → 上报值：62 + 256 = 318
    CODE_318(318, "熔断器故障中止"),

    // 中止代码63 → 上报值：63 + 256 = 319
    CODE_319(319, "模块匹配异常中止"),

    // 中止代码64 → 上报值：64 + 256 = 320
    CODE_320(320, "配置或升级中不响应启动充电中止"),

    // 中止代码65 → 上报值：65 + 256 = 321
    CODE_321(321, "主动防护未解除中止"),

    // 中止代码66 → 上报值：66 + 256 = 322
    CODE_322(322, "车辆电池达到目标 SOC 中止"),

    // 中止代码67 → 上报值：67 + 256 = 323
    CODE_323(323, "车辆达到总电压目标值中止"),

    // 中止代码68 → 上报值：68 + 256 = 324
    CODE_324(324, "车辆达到单体电压目标值中止"),

    // 中止代码69 → 上报值：69 + 256 = 325
    CODE_325(325, "车辆 bms 绝缘故障中止"),

    // 中止代码70 → 上报值：70 + 256 = 326
    CODE_326(326, "车辆输出连接器过温故障中止"),

    // 中止代码71 → 上报值：71 + 256 = 327
    CODE_327(327, "车辆 BMS 元件、输出连接器过温中止"),

    // 中止代码72 → 上报值：72 + 256 = 328
    CODE_328(328, "车辆充电连接器故障中止"),

    // 中止代码73 → 上报值：73 + 256 = 329
    CODE_329(329, "车辆电池组温度过高故障中止"),

    // 中止代码74 → 上报值：74 + 256 = 330
    CODE_330(330, "车辆高压继电器故障中止"),

    // 中止代码75 → 上报值：75 + 256 = 331
    CODE_331(331, "车辆监测点 CC2 电压检测故障中止"),

    // 中止代码76 → 上报值：76 + 256 = 332
    CODE_332(332, "车辆其他故障"),

    // 中止代码77 → 上报值：77 + 256 = 333
    CODE_333(333, "车辆电流过大中止"),

    // 中止代码78 → 上报值：78 + 256 = 334
    CODE_334(334, "车辆电压异常中止"),

    // 中止代码79 → 上报值：79 + 256 = 335
    CODE_335(335, "BMS 中止"),

    // 中止代码91 → 上报值：91 + 256 = 347
    CODE_347(347, "终端离线中止"),

    // 中止代码92 → 上报值：92 + 256 = 348
    CODE_348(348, "平台离线中止"),

    // 中止代码93 → 上报值：93 + 256 = 349
    CODE_349(349, "充电命令超时中止"),

    // 中止代码94 → 上报值：94 + 256 = 350
    CODE_350(350, "启动超时中止"),

    // 中止代码95 → 上报值：95 + 256 = 351
    CODE_351(351, "放电启动超时中止"),

    // 中止代码96 → 上报值：96 + 256 = 352
    CODE_352(352, "非法启动中止"),

    // 中止代码97 → 上报值：97 + 256 = 353
    CODE_353(353, "显示屏操作中止"),

    // 中止代码98 → 上报值：98 + 256 = 354
    CODE_354(354, "内部 VIN 申请中止"),

    // 中止代码99 → 上报值：99 + 256 = 355
    CODE_355(355, "显示屏刷卡中止"),

    // 中止代码100 → 上报值：100 + 256 = 356
    CODE_356(356, "异常电度中止"),

    // 中止代码101 → 上报值：101 + 256 = 357
    CODE_357(357, "余额不足中止"),

    // 中止代码102 → 上报值：102 + 256 = 358
    CODE_358(358, "定电量充中止"),

    // 中止代码103 → 上报值：103 + 256 = 359
    CODE_359(359, "定时间充中止"),

    // 中止代码104 → 上报值：104 + 256 = 360
    CODE_360(360, "错峰充电中止"),

    // 中止代码105 → 上报值：105 + 256 = 361
    CODE_361(361, "定金额充中止"),

    // 中止代码134 → 上报值：134 + 256 = 390
    CODE_390(390, "短路故障中止"),

    // 中止代码136 → 上报值：136 + 256 = 392
    CODE_392(392, "车辆端口电压负压"),

    // 中止代码149 → 上报值：149 + 256 = 405
    CODE_405(405, "机柜倾倒中止"),

    // 中止代码150 → 上报值：150 + 256 = 406
    CODE_406(406, "机柜烟雾故障中止"),

    // 中止代码151 → 上报值：151 + 256 = 407
    CODE_407(407, "机柜温湿度报警故障中止"),

    // 中止代码257 → 上报值：257 + 256 = 513
    CODE_513(513, "IO 板离线中止"),

    // 中止代码258 → 上报值：258 + 256 = 514
    CODE_514(514, "TMU 与 CMU 离线中止"),

    // 中止代码265 → 上报值：265 + 256 = 521
    CODE_521(521, "CMU 门磁触发中止"),

    // 中止代码266 → 上报值：266 + 256 = 522
    CODE_522(522, "TMU 急停中止"),

    // 中止代码267 → 上报值：267 + 256 = 523
    CODE_523(523, "TMU 互锁异常中止"),

    // 中止代码268 → 上报值：268 + 256 = 524
    CODE_524(524, "输出接触器前级电压异常中止"),

    // 中止代码269 → 上报值：269 + 256 = 525
    CODE_525(525, "TMU 门磁触发中止"),

    // 终止代码270 → 上报值：270 + 256 = 526
    CODE_526(526, "IO 板互锁异常中止"),

    // 终止代码271 → 上报值：271 + 256 = 527
    CODE_527(527, "CMU 互锁异常中止"),

    // 终止代码272 → 上报值：272 + 256 = 528
    CODE_528(528, "CMU 无可用模块中止"),

    // 终止代码273 → 上报值：273 + 256 = 529
    CODE_529(529, "TMU 无可用模块中止"),

    // 终止代码274 → 上报值：274 + 256 = 530
    CODE_530(530, "交流输入接触器拒动/误动中止"),

    // 终止代码275 → 上报值：275 + 256 = 531
    CODE_531(531, "交流输入接触器粘连中止"),

    // 终止代码276 → 上报值：276 + 256 = 532
    CODE_532(532, "交流输入异常中止"),

    // 终止代码277 → 上报值：277 + 256 = 533
    CODE_533(533, "泄放回路故障中止"),

    // 终止代码278 → 上报值：278 + 256 = 534
    CODE_534(534, "BMS 上报电压异常中止"),

    // 终止代码279 → 上报值：279 + 256 = 535
    CODE_535(535, "电池电压低中止"),

    // 终止代码280 → 上报值：280 + 256 = 536
    CODE_536(536, "直流输出接触器后级电压异常中止"),

    // 终止代码282 → 上报值：282 + 256 = 538
    CODE_538(538, "BRM 数据异常中止"),

    // 终止代码283 → 上报值：283 + 256 = 539
    CODE_539(539, "BCP 数据异常中止"),

    // 终止代码284 → 上报值：284 + 256 = 540
    CODE_540(540, "BRO 超时中止"),

    // 终止代码285 → 上报值：285 + 256 = 541
    CODE_541(541, "BCL 超时中止"),

    // 终止代码286 → 上报值：286 + 256 = 542
    CODE_542(542, "BCS 超时中止"),

    // 终止代码287 → 上报值：287 + 256 = 543
    CODE_543(543, "BMS 通信协议版本不匹配中止"),

    // 终止代码288 → 上报值：288 + 256 = 544
    CODE_544(544, "预充阶段调压失败中止"),

    // 终止代码289 → 上报值：289 + 256 = 545
    CODE_545(545, "防雷器故障中止"),

    // 终止代码290 → 上报值：290 + 256 = 546
    CODE_546(546, "交流输入断路器故障中止"),

    // 终止代码291 → 上报值：291 + 256 = 547
    CODE_547(547, "充电中辅源故障"),

    // 终止代码292 → 上报值：292 + 256 = 548
    CODE_548(548, "直流母线输出电压过压故障中止"),

    // 终止代码293 → 上报值：293 + 256 = 549
    CODE_549(549, "直流母线输出电压欠压故障中止"),

    // 终止代码294 → 上报值：294 + 256 = 550
    CODE_550(550, "直流母线输出电流过流故障中止"),

    // 终止代码295 → 上报值：295 + 256 = 551
    CODE_551(551, "电池最高允许电压小于充电机最小电压"),

    // 终止代码296 → 上报值：296 + 256 = 552
    CODE_552(552, "绝缘监测前直流输出接触器外侧电压≥10 V"),

    // 终止代码297 → 上报值：297 + 256 = 553
    CODE_553(553, "电池端电压大于电池最高允许充电电压"),

    // 终止代码298 → 上报值：298 + 256 = 554
    CODE_554(554, "BRM 超时中止"),

    // 终止代码299 → 上报值：299 + 256 = 555
    CODE_555(555, "BCP 超时中止"),

    // 终止代码300 → 上报值：300 + 256 = 556
    CODE_556(556, "BRO 超时中止（0xAA）"),

    // 终止代码301 → 上报值：301 + 256 = 557
    CODE_557(557, "灯板通信故障"),

    // 终止代码302 → 上报值：302 + 256 = 558
    CODE_558(558, "BSM 超时"),

    // 终止代码303 → 上报值：303 + 256 = 559
    CODE_559(559, "BSM 报文中单体动力蓄电池电压过压"),

    // 终止代码304 → 上报值：304 + 256 = 560
    CODE_560(560, "BSM 报文中单体动力蓄电池电压过低"),

    // 终止代码305 → 上报值：305 + 256 = 561
    CODE_561(561, "BSM 报文中 SOC 过高"),

    // 终止代码306 → 上报值：306 + 256 = 562
    CODE_562(562, "BSM 报文中 SOC 过低"),

    // 终止代码307 → 上报值：307 + 256 = 563
    CODE_563(563, "BSM 报文中充电过电流"),

    // 终止代码308 → 上报值：308 + 256 = 564
    CODE_564(564, "BSM 报文中动力蓄电池温度过高"),

    // 终止代码309 → 上报值：309 + 256 = 565
    CODE_565(565, "BSM 报文中动力蓄电池绝缘状态异常"),

    // 终止代码310 → 上报值：310 + 256 = 566
    CODE_566(566, "BSM 报文中连接器连接状态异常"),

    // 终止代码311 → 上报值：311 + 256 = 567
    CODE_567(567, "双枪同充辅枪充电异常"),

    // 终止代码313 → 上报值：313 + 256 = 569
    CODE_569(569, "TCU 离线中止"),

    // 终止代码314 → 上报值：314 + 256 = 570
    CODE_570(570, "电表分流器反接故障"),

    // 终止代码315 → 上报值：315 + 256 = 571
    CODE_571(571, "终端按钮中止"),

    // 终止代码316 → 上报值：316 + 256 = 572
    CODE_572(572, "安全防护电池包单体过压保护中止"),

    // 终止代码317 → 上报值：317 + 256 = 573
    CODE_573(573, "安全防护电池过温保护中止"),

    // 终止代码318 → 上报值：318 + 256 = 574
    CODE_574(574, "安全防护电池温升热失控异常保护中止"),

    // 终止代码319 → 上报值：319 + 256 = 575
    CODE_575(575, "安全防护温差过大保护中止"),

    // 终止代码320 → 上报值：320 + 256 = 576
    CODE_576(576, "安全防护 BMS 数据不更新保护中止"),

    // 终止代码321 → 上报值：321 + 256 = 577
    CODE_577(577, "安全防护充电电量过充保护中止"),

    // 终止代码322 → 上报值：322 + 256 = 578
    CODE_578(578, "安全防护整车充电过流保护中止"),

    // 终止代码323 → 上报值：323 + 256 = 579
    CODE_579(579, "安全防护整车电池包过压保护中止"),

    // 终止代码324 → 上报值：324 + 256 = 580
    CODE_580(580, "安全防护 SOC 数据异常保护中止"),

    // 终止代码325 → 上报值：325 + 256 = 581
    CODE_581(581, "安全防护 BCP 电池电压异常保护中止"),

    // 终止代码326 → 上报值：326 + 256 = 582
    CODE_582(582, "安全防护 BCP 电压与实际电池电压不符保护中止"),

    // 终止代码327 → 上报值：327 + 256 = 583
    CODE_583(583, "安全防护电芯电压极差异常保护中止"),

    // 终止代码328 → 上报值：328 + 256 = 584
    CODE_584(584, "安全防护设备空闲枪头带电异常保护中止"),

    // 终止代码329 → 上报值：329 + 256 = 585
    CODE_585(585, "CHademo 充电车辆主动中止"),

    // 终止代码330 → 上报值：330 + 256 = 586
    CODE_586(586, "CHademo 充电 Premission 信号异常中止"),

    // 终止代码331 → 上报值：331 + 256 = 587
    CODE_587(587, "CHademo 充电车辆接触器异常中止"),

    // 终止代码332 → 上报值：332 + 256 = 588
    CODE_588(588, "CHademo 充电车辆故障中止"),

    // 终止代码333 → 上报值：333 + 256 = 589
    CODE_589(589, "CHademo 充电通信超时中止"),

    // 终止代码334 → 上报值：334 + 256 = 590
    CODE_590(590, "CHademo 充电车辆报充电机异常中止"),

    // 终止代码335 → 上报值：335 + 256 = 591
    CODE_591(591, "绝缘检测仪通信故障中止"),

    // 终止代码336 → 上报值：336 + 256 = 592
    CODE_592(592, "液冷 AB 板 CAN3 离线中止");


    private final int code;

    private final String description;


    private static final String UNKNOWN_DESC = "未知结束原因";
    private static final Map<Integer, LvnengPileFinishReasonEnum> CODE_TO_ENUM_MAP = new HashMap<>();

    static {
        for (LvnengPileFinishReasonEnum enumValue : LvnengPileFinishReasonEnum.values()) {
            CODE_TO_ENUM_MAP.put(enumValue.getCode(), enumValue);
        }
    }

    public static String getByCode(Long code) {
        LvnengPileFinishReasonEnum lvnengPileFinishReasonEnum = CODE_TO_ENUM_MAP.get(code.intValue());
        if (lvnengPileFinishReasonEnum == null) {
            return UNKNOWN_DESC;
        }
        return lvnengPileFinishReasonEnum.getDescription();


    }

}